﻿#define _CRT_SECURE_NO_WARNINGS
#include<iostream>
#include <string>
using namespace std;

class PersonTemplate
{
public:
	PersonTemplate(string name, int age)
	{
		this->m_Name = name;
		this->m_Age = age;
	}

	~PersonTemplate()
	{
		cout << "调用析构" << endl;
	}

	string m_Name;
	int m_Age;
};
template<class T>
bool myCompareTemplate(T& a, T& b)
{
	if (a == b)
	{
		return true;
	}
	return false;
}
//2.通过第三代具体化自定义数据类型，解决上述问题；如果具体化能够优先匹配，那么就选择具体化；
	//语法： template<> 返回值  函数名<具体类型>(参数)
template<> bool myCompareTemplate<PersonTemplate>(PersonTemplate& a, PersonTemplate& b)
{
	if (a.m_Age == b.m_Age)
	{
		return true;
	}
	return false;
}
void testTemplateLimitation()
{
	int a = 10;
	int b = 20;
	int ret = myCompareTemplate(a, b);
	//1.返回false，此时为0；
	cout << "ret= " << ret << endl;//0 

	PersonTemplate p1("Tom", 10);
	PersonTemplate p2("Jerry", 10);
	int retPT = myCompareTemplate(p1, p2);
	cout << "retPT= " << retPT << endl;//1 

	//调用析构
	//调用析构

}

//main300：模板函数的局限性及解决方法
int main300()
{
	testTemplateLimitation();

	system("pause");
	return EXIT_SUCCESS;
}
